home *** CD-ROM | disk | FTP | other *** search
- #!/bin/sh
- # Copyright (c) 2008 by Giacomo A. Catenazzi <cate@debian.org>
- # This file is licensed with GPL version 2 (or at your option any later versions)
- # For the full license, see http://fsf.org
-
- set -e
-
- # This script will download and update the Intel microcode
-
- # Check wget
- if ! which wget > /dev/null 2> /dev/null; then
- echo "wget not found. Please install wget" 1>&2
- exit 1
- fi
- if ! grep -sq GenuineIntel /proc/cpuinfo; then
- echo "microcode.ctl: Yet we provide only microcodes for Intel processors" 1>&2
- echo "Your CPU seems not an Intel processor" 1>&2
- exit 1
- fi
-
- REMOTE_RSS='http://feeds.downloadcenter.intel.com/rss/?p=483&lang=eng'
- REMOTE_DATA="$(wget -t 2 -T 20 -nv -q -O - "$REMOTE_RSS" | perl -pe 's|^.+?<IntelDC:Type>Firmware</IntelDC:Type><IntelDC:Version>(20[0-9]*)</IntelDC:Version><IntelDC:Status>latest</IntelDC:Status>.+?<IntelDC:FileURL>([^<]*\1[^<]*)</IntelDC:FileURL>.*$|\1 \2\n|' - || echo 'ERROR')"
- if [ "0$REMOTE_DATA" = "0" -o "0$REMOTE_DATA" = "0ERROR" ] ; then
- echo "Error: could not find remote data in $REMOTE_RSS" 1>&2
- echo "...exiting" 1>&2
- exit 1
- fi
- REMOTE_FILE=$(echo $REMOTE_DATA | sed -ne 's#^\(.*\) \(http://.*\)$#\2#p' -)
- REMOTE_DATE=$(echo $REMOTE_DATA | sed -ne 's#^\(.*\) \(http://.*\)$#\1#p' -)
-
- LOCAL_DIR=/usr/share/misc
- LOCAL_FILE="$LOCAL_DIR/intel-microcode.dat"
-
- if [ -f "$LOCAL_FILE" ] ; then
- LOCAL_DATE=$(sed -ne 's#^/\*\(.*\)\*/.*$#\1#p' "$LOCAL_FILE" | head -n 1 | date "+%Y%m%d" -f - )
- echo "Local version: $LOCAL_DATE"
- echo "Remote version: $REMOTE_DATE"
-
- if [ "0$REMOTE_DATE" = "0" ] ; then
- echo "could not extract the actual data of remote microcode"
- exit 1
- elif [ "0$REMOTE_DATE" -le "0$LOCAL_DATE" ] ; then
- echo "No need to download a new microcode" 1>&2
- exit 0
- fi
- else
- echo "Local version: (none)"
- echo "Remote version: $REMOTE_DATE"
- fi
-
- echo "Downloading a new version of microcode."
-
- case "$REMOTE_FILE" in
- *.tgz | *.tar.gz ) FILTER=" tar xzOf - " ;;
- *.dat.gz ) FILTER=" gzip -cd " ;;
- * ) FILTER=" cat - " ;;
- esac
-
-
- if wget -t 2 -T 20 -nv -q -O - "$REMOTE_FILE" | $FILTER > "$LOCAL_FILE".tmp ; then
- mv "$LOCAL_FILE".tmp "$LOCAL_FILE"
- echo "microcode downloaded sucessfully" 1>&2
- else
- echo "Error on downloading the microcode." 1>&2
- echo "Install microcode manually. (See /usr/share/doc/microcode.ctl/README.Debian)" 1>&2
- exit 1
- fi
-
- # load the new microcode
-
-
- if [ "-$1" != "--no-reload" ] ; then
- /etc/init.d/microcode.ctl reload
- fi
-
-